#region MIT License
//Copyright (c) 2007 Shane Isbell
//
// Permission is hereby granted, free of charge, to any person obtaining a copy 
// of this software and associated documentation files (the "Software"), to 
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is 
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in 
// all copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
// THE SOFTWARE. 
#endregion

using System;
using System.Collections.Generic;
using System.Text;

namespace Archivist.Tar
{
    public class TarEntry
    {
        private byte[] data;

        private String fileName;

        private long length;

        private long paddedLength;

        private FileType fileType;

        private AccessRights ownerAccessRights;

        private AccessRights groupAccessRights;

        private AccessRights otherAccessRights;

        private SpecialAccessRights specialAccessRights;

        private DateTime modificationTime;

        private String ownerId;

        private String groupId;

        private long checksum;

        private String nameOfLinkedFile;

        private FileTypeForFileMode fileTypeForFileMode;

        public FileTypeForFileMode FileTypeForFileMode
        {
            get
            {
                return fileTypeForFileMode;
            }

            set
            {
                fileTypeForFileMode = value;
            }
        }

        public SpecialAccessRights SpecialAccessRights
        {
            get
            {
                return specialAccessRights;
            }

            set
            {
                specialAccessRights = value;
            }
        }
        

        public String NameOfLinkedFile
        {
            get
            {
                return nameOfLinkedFile;
            }

            set
            {
                this.nameOfLinkedFile = value;
            }
        }

        public long Checksum
        {
            get
            {
                return checksum;
            }

            set
            {
                this.checksum = value;
            }
        }

        public String UserId
        {
            get
            {
                return ownerId;
            }

            set
            {
                this.ownerId = value;
            }
        }

        public String GroupId
        {
            get
            {
                return groupId;
            }

            set
            {
                this.groupId = value;
            }
        }

        public DateTime ModificationTime
        {
            get
            {
                return modificationTime;
            }

            set
            {
                this.modificationTime = value;
            }
        }


        public AccessRights OwnerAccessRights
        {
            get
            {
                return ownerAccessRights;
            }

            set
            {
                this.ownerAccessRights = value;
            }
        }

        public AccessRights GroupAccessRights
        {
            get
            {
                return groupAccessRights;
            }

            set
            {
                this.groupAccessRights = value;
            }
        }

        public AccessRights OtherAccessRights
        {
            get
            {
                return otherAccessRights;
            }

            set
            {
                this.otherAccessRights = value;
            }
        }

        public FileType FileType
        {
            get
            {
                return fileType;
            }

            set
            {
                this.fileType = value;
            }
        }

        public long Length
        {
            set
            {
                this.length = value;
            }

            get
            {
                return length;
            }
        }

        public long PaddedLength
        {
            set
            {
                this.paddedLength = value;
            }

            get
            {
                return paddedLength;
            }
        }

        public String FileName
        {
            set
            {
                this.fileName = value;
            }

            get
            {
                return fileName;
            }
        }

        public byte[] Data
        {
            set
            {
                this.data = value;
            }

            get
            {
                return data;
            }
        }
    }
}
